// 聊天服务器方法
const chatRemote = require('../remote/chatRemote')

class Handler {
  constructor(app) {
    this.app = app
  }

  /**
   * 返送信息给用户
   * 
   * @param {Object} msg 请求包
   * @param {Object} session 
   * @param {Function} next 下一步回调 = cb
   * 
   */
  send(msg, session, next) {
    const rid = session.get('rid') // 获取聊天通道id
    const username = session.uid.split('*')[0] // 获取用户名
    const channelService = this.app.get('channelService')
    const param = {
      msg: msg.content,
      from: username,
      target: msg.target // 指定发送给特定用户
    }
    const channel = channelService.getChannel(rid, false) // 获取聊天通道信息

    // 如果发送给所有用户
    if (msg.target == '*') {
      // 对聊天通道进行全面广播
      channel.pushMessage('onChat', param)
    }
    // 发送给特定用户 
    else {
      const tuid = msg.target + '*' + rid // 获取特定用户在某聊天通道内的名
      const tsid = channel.getMember(tuid)['sid'] // 获取特定用户的服务器名
      // 对聊天通道进行广播，后跟目标用户
      channelService.pushMessageByUids('onChat', param, [{
        uid: tuid,
        sid: tsid
      }])
    }
    // 返回路由
    next(null, {
      route: msg.route
    })
  }
}

module.exports = app => {
  return new Handler(app)
}